//package com.jdrx.sw.sewage.filter;
//
//import java.io.IOException;
//import java.util.Map;
//
//import javax.servlet.Filter;
//import javax.servlet.FilterChain;
//import javax.servlet.FilterConfig;
//import javax.servlet.ServletException;
//import javax.servlet.ServletRequest;
//import javax.servlet.ServletResponse;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import com.jdrx.sw.sewage.config.GateWayConfig;
//import com.jdrx.sw.sewage.constant.AioAppConstant;
//import com.jdrx.sw.sewage.wrapper.HeaderMapRequestWrapper;
//
//import io.jsonwebtoken.JwtParser;
//import io.jsonwebtoken.Jwts;
//import lombok.extern.slf4j.Slf4j;
//
//@Slf4j
//@Component
//public class GateWayFilter implements Filter {
//	@Value("${jdrx.gw.jwt-signing-key}")
//    private String signingKey;
//	@Autowired
//    private GateWayConfig gateWayConfig;
//
//	private JwtParser jwtParser = Jwts.parser();
//	private HeaderMapRequestWrapper headerMapRequestWrapper;
//
//	@Override
//	public void init(FilterConfig filterConfig) throws ServletException {
//		jwtParser.setSigningKey(gateWayConfig.getJwtSigningKey().trim());
//		log.info("初始化网关过滤器，jwt签名={}", gateWayConfig.getJwtSigningKey().trim());
//	}
//
//	@SuppressWarnings("rawtypes")
//	@Override
//	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
//		HttpServletRequest request = (HttpServletRequest) servletRequest;
//		HttpServletResponse response = (HttpServletResponse) servletResponse;
//		headerMapRequestWrapper = new HeaderMapRequestWrapper(request);
//
//		if(StringUtils.startsWith(request.getServletPath(), "/api")) {
//			if(StringUtils.isEmpty(gateWayConfig.getJwtHeader())) {
//				log.error("header authorization 不能为空");
//				return;
//			}
//
//			String authToken = request.getHeader(gateWayConfig.getJwtHeader().toLowerCase());
//			if(StringUtils.isEmpty(authToken)) {
//				return;
//			}
//
//			boolean isSign = jwtParser.isSigned(authToken);
//		    Object obj = null;
//		    try {
//		    	obj = jwtParser.parse(authToken).getBody();
//		    	if(isSign) {
//		    		if(obj != null) {
//		    			Map jwtbody = (Map) obj;
//		    			if(StringUtils.isBlank(request.getHeader(AioAppConstant.GW_UID))) {
//		    				headerMapRequestWrapper.addHeader(AioAppConstant.GW_UID, jwtbody.get(AioAppConstant.JWT_UID) + "");
//		    			}
//		    			if(StringUtils.isBlank(request.getHeader(AioAppConstant.GW_TID))) {
//		    				headerMapRequestWrapper.addHeader(AioAppConstant.GW_TID, jwtbody.get(AioAppConstant.JWT_TID) + "");
//		    			}
//		    			headerMapRequestWrapper.addHeader(AioAppConstant.GW_DATA_NODE, "");
//		    			headerMapRequestWrapper.addHeader(AioAppConstant.GW_TOKEN, authToken);
//		    		} else {
//		    			log.error("token解析错误,解析结果={}", obj);
//		    		}
//		    	} else {
//		    		log.error("token签名错误", authToken);
//		    	}
//			} catch (Exception e) {
//				log.error("解析token异常", e);
//			}
//		}
//		// 这里更改了header头，所以参数为headerMapRequestWrapper
//		chain.doFilter(headerMapRequestWrapper, response);
//	}
//
//	@Override
//	public void destroy() {
//		log.info("销毁网关过滤器GatewayFilter");
//	}
//}